package com.tools.common.container;

import com.tools.common.object.Note;

import java.io.Serializable;
import java.util.Comparator;

/**
 * 自定义 Set 集合容器的
 * 默认实现，继承自 AbsOwnSet 类
 * 拥有 OwnRow 的默认实现功能
 * 以及 AbsOwnSet 类的扩展功能
 * 基本兼容原生 Set 的方法
 * */
@Note("自定义 Set 集合容器的默认实现，继承自 AbsOwnSet 类" +
        "拥有 OwnRow 的默认实现功能，以及 AbsOwnSet 类的" +
        "扩展功能，基本兼容原生 Set 的方法")
public class OwnSet<T> extends AbsOwnSet<T> implements Serializable {

    @Note("序列号 UID")
    private static final long serialVersionUID = 4090302815454977640L;

    public OwnSet() {
    }

    public OwnSet(int initSize) {
        super(initSize);
    }

    public OwnSet(Comparator<? super T> c) {
        super(c);
    }

    public OwnSet(T[] array) {
        super(array);
    }

    public OwnSet(Comparator<? super T> c, T[] array) {
        super(c, array);
    }

    public OwnSet(Iterable<? extends T> iterable) {
        super(iterable);
    }

    public OwnSet(Iterable<? extends T> iterable, Comparator<? super T> c) {
        super(iterable, c);
    }

    public OwnSet(SetEnum implEnum, int initSize) {
        super(implEnum, initSize);
    }

    public OwnSet(SetEnum implEnum, Comparator<? super T> c) {
        super(implEnum, c);
    }

    @SafeVarargs
    public OwnSet(SetEnum implEnum, T... array) {
        super(implEnum, array);
    }

    public OwnSet(SetEnum implEnum, Comparator<? super T> c, T[] array) {
        super(implEnum, c, array);
    }

    public OwnSet(SetEnum implEnum, Iterable<? extends T> iterable) {
        super(implEnum, iterable);
    }

    public OwnSet(SetEnum implEnum, Iterable<? extends T> iterable, Comparator<? super T> c) {
        super(implEnum, iterable, c);
    }

    /* *******************************************************************************************
     *
     *          链式增删改方法
     *
     * *******************************************************************************************
     * */

    @Override
    public OwnSet<T> add(T obj) {
        super.add(obj);
        return this;
    }


    @Override
    @SafeVarargs
    public final OwnSet<T> addAll(T... objs) {
        super.addAll(objs);
        return this;
    }

    @Override
    public OwnSet<T> addAll(Iterable<? extends T> objs) {
        super.addAll(objs);
        return this;
    }

    @Override
    public OwnSet<T> remove(Object obj) {
        super.remove(obj);
        return this;
    }

    @Override
    public OwnSet<T> removeAll(Object[] objs) {
        super.removeAll(objs);
        return this;
    }

    @Override
    public OwnSet<T> removeAll(Iterable<?> objs) {
        super.removeAll(objs);
        return this;
    }

    public OwnSet<T> sortRow(Comparator<? super T> c) {
        return new OwnSet<>(SetEnum.TREE, super.sortToSet(c), c);
    }
}
